#!/bin/bash

# IoT Manager 一键部署脚本

# 自定义端口配置
PORT_FRONTEND=${PORT_FRONTEND:-8080}
PORT_BACKEND=${PORT_BACKEND:-3001}
PORT_MQTT=${PORT_MQTT:-1883}
PORT_MONGODB=${PORT_MONGODB:-27018}
PORT_WEBSOCKET=${PORT_WEBSOCKET:-8081}

# 检查.env文件
if [ ! -f .env ]; then
    echo "创建默认.env文件..."
    touch .env
    echo "PORT_FRONTEND=$PORT_FRONTEND" >> .env
    echo "PORT_BACKEND=$PORT_BACKEND" >> .env
    echo "PORT_MQTT=$PORT_MQTT" >> .env
    echo "PORT_MONGODB=$PORT_MONGODB" >> .env
    echo "PORT_WEBSOCKET=$PORT_WEBSOCKET" >> .env
    echo "MONGO_URI=mongodb://mongodb:$PORT_MONGODB/iot" >> .env
    echo "JWT_SECRET=your_jwt_secret" >> .env
    echo "VITE_API_URL=http://$(hostname -I | awk '{print $1}'):$PORT_BACKEND" >> .env
    echo "VITE_WS_PORT=$PORT_WEBSOCKET" >> .env
fi
docker-compose down -v
# 构建镜像
echo "构建Docker镜像..."
docker-compose build

# 启动服务
echo "启动容器..."
docker-compose up -d

# 显示访问信息
FRONTEND_PORT=$(grep PORT_FRONTEND .env | cut -d'=' -f2)
BACKEND_PORT=$(grep PORT_BACKEND .env | cut -d'=' -f2)
MQTT_PORT=$(grep PORT_MQTT .env | cut -d'=' -f2)
MONGODB_PORT=$(grep PORT_MONGODB .env | cut -d'=' -f2)
WEBSOCKET_PORT=$(grep PORT_WEBSOCKET .env | cut -d'=' -f2)

echo "
部署完成！"
echo "前端访问地址: http://$(hostname -I | awk '{print $1}'):$FRONTEND_PORT"
echo "后端API地址: http://$(hostname -I | awk '{print $1}'):$BACKEND_PORT"
echo "MQTT服务地址: tcp://$(hostname -I | awk '{print $1}'):$MQTT_PORT"
echo "MongoDB连接地址: mongodb://$(hostname -I | awk '{print $1}'):$MONGODB_PORT"
echo "WebSocket地址: ws://$(hostname -I | awk '{print $1}'):$WEBSOCKET_PORT"
echo "
提示：如需自定义配置，请修改.env文件后重新运行此脚本"

# 生成环境变量文件
generate_env_file() {
    local env_file=".env"
    
    # 如果 .env 文件已存在，询问是否覆盖
    if [ -f "$env_file" ]; then
        read -p "发现已存在的 .env 文件，是否覆盖？(y/N) " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            print_info "保留现有的 .env 文件"
            return
        fi
    fi

    # 生成新的环境变量
    cat > "$env_file" << EOF
# MongoDB 配置
PORT_MONGODB=27017
MONGO_ROOT_USERNAME=iot_user
MONGO_ROOT_PASSWORD=$(generate_password)

# MQTT 配置
PORT_MQTT=1883
PORT_MQTT_WS=9001
MQTT_USERNAME=mqtt_user
MQTT_PASSWORD=$(generate_password)

# 后端配置
PORT_BACKEND=3001
PORT_WEBSOCKET=8080
JWT_SECRET=$(openssl rand -base64 32)

# 前端配置
PORT_FRONTEND=3000

# 日志配置
LOG_LEVEL=info
LOG_FILE=logs/app.log

# 管理员配置
ADMIN_REGISTRATION_CODE=admin123456

# 新增 MQTT_URL 配置
MQTT_URL=mqtt://mqtt:1883
EOF

    print_info "已生成新的 .env 文件"
}